package com.operator.Activitys.activity;

import android.os.Bundle;
import android.os.Handler;
import android.support.design.widget.TabLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import android.widget.PopupMenu;
import android.widget.TextView;

import com.google.gson.Gson;
import com.operator.Activitys.R;
import com.operator.Activitys.activity.base.BaseActivity;
import com.operator.Activitys.adapter.SupplyAdapter;
import com.operator.Activitys.adapter.base.BaseRecyclerViewAdapter;
import com.operator.Activitys.bean.Supply;
import com.operator.Activitys.bean.SupplyType;
import com.operator.Activitys.bean.User;
import com.operator.Activitys.http.manager.HomeManager;
import com.operator.Activitys.utils.Constant;
import com.operator.Activitys.utils.JumperUtils;
import com.operator.Activitys.utils.ToastUtils;
import com.scwang.smartrefresh.layout.SmartRefreshLayout;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener;
import com.scwang.smartrefresh.layout.listener.OnRefreshListener;

import org.simple.eventbus.Subscriber;
import org.simple.eventbus.ThreadMode;

import java.util.ArrayList;
import java.util.List;

import butterknife.Bind;
import butterknife.OnClick;

/**
 * 项目名称：金泽云 手机app
 * 类描述：通讯供求
 * 创建人：张飞祥
 * 创建时间：2018/5/24 16:12
 * 修改人：张飞祥
 * 修改时间：2018/5/24 16:12
 * 修改备注：
 */
public class SupplyActivity extends BaseActivity implements TabLayout.OnTabSelectedListener {

    //返回按钮
    @Bind(R.id.iv_return)
    ImageView ivReturn;
    //标题
    @Bind(R.id.tv_title)
    TextView tvTitle;
    //功能按钮
    @Bind(R.id.iv_function)
    ImageView ivFunction;

    //搜索按钮
    @Bind(R.id.iv_supply_search)
    ImageView ivSupplySearch;

    //滑动标题栏
    @Bind(R.id.tab_layout_supply_type)
    TabLayout tabLayoutSupplyType;
    //数据列表
    @Bind(R.id.rv_list)
    RecyclerView rvList;
    //下拉控件
    @Bind(R.id.layout_refresh)
    SmartRefreshLayout layoutRefresh;

    //内存中用户实体
    protected User mACacheUser = null;

    //TODO 滑块标题
    //通讯供求 type 集合
    private List<SupplyType> mSupplyTypeList = null;
    //功能 条目弹出
    private PopupMenu mPopupMenu = null;
    //设置 供求类别 id
    private String mSupplyTagId = "";
    //设置 供求类别 标题
    private String mSupplyTagTitle = "全部";

    //TODO http 变量
    //请求哪一页
    private int mIndex = 1;
    //每页几条
    private int mPageCount = 10;
    //上拉加载 没有数据 page 是否 +1
    private boolean mPullPageFlag = true;

    //TODO 初始化网络请求
    public HomeManager mApiManager;

    //TODO 通讯供求 信息
    //adapter 适配器
    private SupplyAdapter mAdapter = null;
    //list 数组集合
    private List<Supply> mSupplyList = null;

    //供求type 加载一次 flag
    private boolean mOneFlag = true;

    @Override
    protected void initUI() {
        setContentView(R.layout.act_supply);
        //设置状态栏为透明
        setThemeTransparent();
        //网络请求接口 常驻方法
        mApiManager = mApiManager.getHomeApiManager(this, this.getTaskId());
        //获取内存用户实体
        Gson gson = new Gson();
        mACacheUser = gson.fromJson(mACache.getAsJSONObject(Constant.CACHE_USER) + "", User.class);

        //标题
        tvTitle.setText("通讯供求");
        //显示返回按钮
        ivReturn.setVisibility(View.VISIBLE);
        //显示功能按钮
        ivFunction.setVisibility(View.VISIBLE);
        //设置功能按钮图标
        ivFunction.setImageResource(R.drawable.ic_function_supply);
        //初始化 条目
        mPopupMenu = new PopupMenu(this, ivFunction);
    }

    @Override
    protected void initData() {

        //TODO 初始化 menu
        initPopupMenu();
        //TODO 获取 通讯供求 type
        mApiManager.homeSupplyType();
        //TODO 开始网络请求
        initSupplyHttp();
        //TODO 上拉加载
        initLoadMoreListener();
        //TODO 下拉刷新
        initPullRefresh();
    }


    /**
     * 按钮点击事件
     *
     * @return
     */
    @OnClick({R.id.iv_return, R.id.iv_function,R.id.iv_supply_search})
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.iv_return:            //返回按钮
                finish();
                break;
            case R.id.iv_function:          //功能列表
                mPopupMenu.show();
                break;
            case R.id.iv_supply_search:     //搜索按钮
                JumperUtils.JumpTo(this,SearchSupplyActivity.class);
                break;
        }
    }


    /**
     * 初始化 menu
     */

    private void initPopupMenu() {
        //加载 menu 布局
        mPopupMenu.getMenuInflater().inflate(R.menu.menu_supply, mPopupMenu.getMenu());
        //设置 item 点击事件
        mPopupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem menuItem) {
                //对菜单项点击内容进行设置
                int id = menuItem.getItemId();
                if (id == R.id.supply_mode_add) {
                    JumperUtils.JumpTo(SupplyActivity.this, AddSupplyActivity.class);
                } else {
                    JumperUtils.JumpTo(SupplyActivity.this, MySupplyActivity.class);
                }
                return onOptionsItemSelected(menuItem);
            }
        });
    }

    /**
     * http 获取 通讯供求 网络请求
     */
    private void initSupplyHttp() {
        //清空列表
        if (mSupplyList != null && mSupplyList.size() > 0)
            mSupplyList.clear();
        //清空adapter
        if (mAdapter != null)
            mAdapter.clearDataAll();

        //初始化全局 list
        mSupplyList = new ArrayList<>();
        //设置 为 首次加载
        mApiManager.getType(Constant.FIRST_LOAD);
        //自动刷新
        layoutRefresh.autoRefresh();
        //初始化 上拉加载  page 允许 +1
        mPullPageFlag = true;
        //初始化页数
        mIndex = 1;
        //TODO 开始网络请求
        mApiManager.homeSupplyList(0,mSupplyTagId,"",mIndex,mPageCount);
    }


    /**
     * 上拉加载数据
     */
    private void initLoadMoreListener() {
        layoutRefresh.setOnLoadMoreListener(new OnLoadMoreListener() {
            @Override
            public void onLoadMore(RefreshLayout refreshlayout) {
                //设置文字上拉加载更多
                mApiManager.getType(Constant.PULLUP_LOAD_MORE);
                //如果 为 true 可以 查看下一页
                if (mPullPageFlag) {
                    //数据请求
                    mIndex = mIndex + 1;
                }
                //TODO 上拉加载 网络请求
                mApiManager.homeSupplyList(0,mSupplyTagId,"",mIndex,mPageCount);
            }
        });
    }

    /**
     * 下拉刷新操作
     */
    private void initPullRefresh() {

        layoutRefresh.setOnRefreshListener(new OnRefreshListener() {
            @Override
            public void onRefresh(RefreshLayout refreshlayout) {
                //TODO 开始刷新
                initSupplyHttp();
            }
        });
    }


    /**
     * 通讯供求type 列表
     *
     * ps：这块 eventBus 带有粘性事件，出现了一个BUG,以后有时间再改
     *
     * bug 描述：网络请求获取 供求分类列表 时，只发送了一次 EventBus 消息，
     * 但这个 方法 却接收到了两次，现因业务模块赶时间，所以先用 flag 判断一下，
     * 以后去做整改！
     *
     */
    @Subscriber(tag = Constant.BUS_HOME_SUPPLY_TYPE, mode = ThreadMode.MAIN)
    public void initSupplyType(final List<SupplyType> list) {

        if (mOneFlag){
            mOneFlag = false;
            if (list != null && list.size() != 0) {
                //初始化 分类 集合
                mSupplyTypeList = new ArrayList<>();
                //添加 1个 默认 type
                SupplyType supplyType = new SupplyType();
                supplyType.setId("");
                supplyType.setTitle("全部");

                mSupplyTypeList.add(supplyType);

                //添加 type 数据
                mSupplyTypeList.addAll(list);
                //TODO 循环添加 type
                for (int i = 0; i < mSupplyTypeList.size(); i++) {
                    tabLayoutSupplyType.addTab(tabLayoutSupplyType.newTab().setText(mSupplyTypeList.get(i).getTitle()));
                }

                //动态判断 是否需要滑动
                if (mSupplyTypeList.size() > 4){
                    tabLayoutSupplyType.setTabMode(TabLayout.MODE_SCROLLABLE);
                }else{
                    tabLayoutSupplyType.setTabMode(TabLayout.MODE_FIXED);
                }

                //添加 tabLayout 监听事件
                tabLayoutSupplyType.addOnTabSelectedListener(this);
            }
        }
    }

    /**
     * 通讯供求 列表 报错
     */
    @Subscriber(tag = Constant.BUS_HOME_SUPPLY_LIST_ERROR, mode = ThreadMode.MAIN)
    public void initSupplyListError(String httpSupplyError) {
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                //TODO View 非空判断
                if (layoutRefresh != null) {
                    //结束刷新
                    layoutRefresh.finishRefresh(false);
                    //结束加载
                    layoutRefresh.finishLoadMore(false);
                    //弹出提示
                    ToastUtils.showShort(SupplyActivity.this, "加载失败，网络连接不稳定！");
                }
            }
        }, 2000);
    }


    /**
     * 通讯供求 列表  首次数据加载
     */
    @Subscriber(tag = Constant.BUS_HOME_SUPPLY_LIST, mode = ThreadMode.MAIN)
    public void initSupplyList(final List<Supply> list) {

        //开启延时操作
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {

                //TODO View 非空判断
                if (rvList != null){
                    if (list != null && list.size() != 0) {
                        //设置 全局"宽带订单"变量 数据
                        mSupplyList.addAll(list);
                        //设置 通讯供求 适配器
                        mAdapter = new SupplyAdapter(SupplyActivity.this,false, list) {
                            @Override
                            public void setItemDelOnClick(int position) {
                            }
                        };

                        //添加 适配器 样式
                        rvList.setLayoutManager(new LinearLayoutManager(SupplyActivity.this, LinearLayoutManager.VERTICAL, false));
                        //添加 适配器
                        rvList.setAdapter(mAdapter);

                        //条目点击事件
                        mAdapter.setOnItemClickListener(new BaseRecyclerViewAdapter.OnRecyclerViewItemClickListener() {
                            @Override
                            public void onItemClick(View view, int position) {
                                /**
                                 * 判断 当前 是否 是自己发布的 供求
                                 * true： 跳转 我的 供求信息列表
                                 * false：跳转 供求信息 详情
                                 */
                                if (mACacheUser.getId() != list.get(position).getStoreId()){
                                    Bundle bundle = new Bundle();
                                    bundle.putString(Constant.INTENT_SUPPLY_SHOP_NAME,list.get(position).getStoreName());
                                    JumperUtils.JumpTo(SupplyActivity.this,SupplyDetailsActivity.class,bundle);
                                }else{
                                    JumperUtils.JumpTo(SupplyActivity.this,MySupplyActivity.class);
                                }
                            }
                        });
                    } else {
                        //弹出提示
                        ToastUtils.showShort(SupplyActivity.this, "还没有"+mSupplyTagTitle+"供求信息！");
                    }
                    //结束刷新
                    layoutRefresh.finishRefresh();
                }
            }
        }, 3000);
    }

    /**
     * 通讯供求 列表  上拉加载数据
     */
    @Subscriber(tag = Constant.BUS_HOME_SUPPLY_LIST_FOOT)
    public void initSupplyListFoot(List<Supply> list) {
        final List<Supply> footList = list;

        //开启延时操作
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                //TODO View 非空判断
                if (layoutRefresh != null) {
                    /**
                     * 判断是否有数据
                     * 当 返回列表 数据 size 0 没有更多数据可加载了
                     */
                    if (footList.size() == 0) {
                        //page 不允许 + 1
                        mPullPageFlag = false;
                        //显示提示
                        ToastUtils.showShort(SupplyActivity.this, "没有更多数据了");
                    } else {
                        //page 允许 + 1
                        mPullPageFlag = true;
                        //填充上拉加载数据，加载到adapter里面
                        mSupplyList.addAll(footList);
                        if (mAdapter != null) {
                            //加载到adapter里面
                            mAdapter.addFooterItem(footList);
                        }
                        //显示提示
                        ToastUtils.showShort(SupplyActivity.this, "更新了 " + footList.size() + " 条目数据");
                    }
                    //结束加载
                    layoutRefresh.finishLoadMore();
                }
            }
        }, 2000);
    }


    /**
     * tabLayout 点击监听事件
     * @param tab
     */
    @Override
    public void onTabSelected(TabLayout.Tab tab) {

        //获取当前 tab 位置
        String tabStr = tab.getText().toString();
        /**
         * 循环判断 设置 id
         */
        for (int i = 0;i<mSupplyTypeList.size();i++){
            //获取 当前 type 第 i 个
            SupplyType type = mSupplyTypeList.get(i);
            if (type.getTitle().equals(tabStr)){
                //动态设置 id
                mSupplyTagId = type.getId();
                //动态设置 标题
                mSupplyTagTitle = type.getTitle();
                //开始网络请求
                initSupplyHttp();
            }
        }
    }

    @Override
    public void onTabUnselected(TabLayout.Tab tab) {
    }
    @Override
    public void onTabReselected(TabLayout.Tab tab) {

    }
}
